Claude Codeのヤバい挙動
基本的に便利ということを前提として、予防する必要があるべき変な挙動もする
localのmigrationが失敗したのでlocal向けにスクリプトを作って成功。成功したから削除してproductionには元のスクリプトを適用しようとする(明らかに失敗する)
テーブルの予備替えをアプリケーションで行った後、そのアプリケーションデプロイ前にテーブルの削除をしようとする
まだこういう挙動を利用者が制御できる必要がある
将来的には制御を監視するLLMと実行するLLMに別れたりするのかな?
importをIMPORTと書く
テストを通そうとしてテストむけの分岐を増やそうとする
fallbackをやたら増やそうとする(仕様の理解と確認が複雑になる)
テストが落ちているのに「期待される結果です」と言って無視しようとする
code:ts
// 無理やりテストを通そうとしてunknownを使う
expect(() => ItemId.of(null as unknown as string)).toThrow('ItemId must be string or number');
});
// 正しくはこう。@ts-expect-error を使用する方が適切
// TypeScriptに「この行はエラーになることを期待している」と伝える
expect(() => {
// @ts-expect-error Testing invalid input intentionally
ItemId.of(null);
}).toThrow('ItemId must be string or number');
これハマり始めると本当によくやる。
テストを通すテストを書く
対策
自動でチェックできるような仕組みを整えておく
テスト・linter